package com.xy.webadmin.app.model;

import com.baomidou.mybatisplus.annotation.*;
import com.xy.webadmin.upms.model.SysDept;
import com.xy.webadmin.upms.model.SysDataPerm;
import com.xy.application.common.constant.ThirdOAPlatform;
import com.xy.common.core.annotation.*;
import com.xy.webadmin.upms.model.SysRole;
import lombok.Data;

import java.util.Date;
import java.util.Map;

/**
 * 公司数据源实体对象。
 *
 * @author xiaoyue
 * @date 2025-05-13
 */
@Data
@TableName(value = "xy_company_config")
public class CompanyConfig {

    /**
     * 公司。
     */
    @UniqueVerifyField
    @TableId(value = "company_id")
    @DeptFilterColumn
    private Long companyId;

    /**
     * 阿里云短信KeyId。
     */
    @TableField(value = "sms_access_key_id")
    private String smsAccessKeyId;

    /**
     * 阿里云短信Key密钥。
     */
    @TableField(value = "sms_access_key_secret")
    private String smsAccessKeySecret;

    /**
     * 阿里云全局接入点域名。
     */
    @TableField(value = "sms_endpoint")
    private String smsEndpoint;

    /**
     * 邮件服务器域名。
     */
    @TableField(value = "email_host")
    private String emailHost;

    /**
     * 邮件服务器端口。
     */
    @TableField(value = "email_port")
    private String emailPort;

    /**
     * 邮箱用户名。
     */
    @TableField(value = "email_username")
    private String emailUsername;

    /**
     * 邮件授权码。
     */
    @TableField(value = "email_password")
    private String emailPassword;

    /**
     * 企业微信ID。
     */
    @TableField(value = "wework_corpid")
    private String weworkCorpid;

    /**
     * 企业微信应用密钥。
     */
    @TableField(value = "wework_corpsecret")
    private String weworkCorpsecret;

    /**
     * 企业微信应用ID。
     */
    @TableField(value = "wework_agent_id")
    private String weworkAgentId;

    /**
     * 企业微信公众号跳转根URL。
     */
    @TableField(value = "wework_url")
    private String weworkUrl;

    /**
     * 微信公众号APPID。
     */
    @TableField(value = "wechat_app_id")
    private String wechatAppId;

    /**
     * 微信公众号密钥。
     */
    @TableField(value = "wechat_secret")
    private String wechatSecret;

    /**
     * 微信公众号跳转根URL。
     */
    @TableField(value = "wechat_url")
    private String wechatUrl;

    /**
     * 钉钉企业ID。
     */
    @TableField(value = "dingtalk_crop_id")
    private String dingtalkCropId;

    /**
     * 钉钉APPKEY。
     */
    @TableField(value = "dingtalk_app_key")
    private String dingtalkAppKey;

    /**
     * 钉钉密钥。
     */
    @TableField(value = "dingtalk_app_secret")
    private String dingtalkAppSecret;

    /**
     * 钉钉应用ID。
     */
    @TableField(value = "dingtalk_agent_id")
    private String dingtalkAgentId;

    /**
     * 钉钉跳转根URL。
     */
    @TableField(value = "dingtalk_url")
    private String dingtalkUrl;

    /**
     * 飞书APPID。
     */
    @TableField(value = "lark_app_id")
    private String larkAppId;

    /**
     * 飞书密钥。
     */
    @TableField(value = "lark_app_secret")
    private String larkAppSecret;

    /**
     * 飞书跳转根URL。
     */
    @TableField(value = "lark_url")
    private String larkUrl;

    /**
     * 默认角色。
     */
    @TableField(value = "default_role_id")
    private Long defaultRoleId;

    /**
     * 默认数据权限。
     */
    @TableField(value = "default_data_perm_id")
    private Long defaultDataPermId;

    /**
     * 组织架构平台。
     */
    @TableField(value = "oa_sync_platform")
    private Integer oaSyncPlatform;

    /**
     * 逻辑删除标记字段(0: 正常 1: 已删除)。
     */
    @TableLogic
    @TableField(value = "is_deleted")
    private Integer isDeleted;

    /**
     * 创建者ID。
     */
    @TableField(value = "create_user_id")
    private Long createUserId;

    /**
     * 更新者ID。
     */
    @TableField(value = "update_user_id")
    private Long updateUserId;

    /**
     * 创建时间。
     */
    @TableField(value = "create_time")
    private Date createTime;

    /**
     * 更新时间。
     */
    @TableField(value = "update_time")
    private Date updateTime;

    @RelationDict(masterIdField = "companyId", slaveModelClass = SysDept.class, slaveIdField = "deptId", slaveNameField = "deptName")
    @TableField(exist = false)
    private Map<String, Object> companyIdDictMap;

    @RelationDict(masterIdField = "defaultRoleId", slaveModelClass = SysRole.class, slaveIdField = "roleId", slaveNameField = "roleName")
    @TableField(exist = false)
    private Map<String, Object> defaultRoleIdDictMap;

    @RelationDict(masterIdField = "defaultDataPermId", slaveModelClass = SysDataPerm.class, slaveIdField = "dataPermId", slaveNameField = "dataPermName")
    @TableField(exist = false)
    private Map<String, Object> defaultDataPermIdDictMap;

    @RelationConstDict(masterIdField = "oaSyncPlatform", constantDictClass = ThirdOAPlatform.class)
    @TableField(exist = false)
    private Map<String, Object> oaSyncPlatformDictMap;
}
